A.
Først findes hvilke IO SYS_LED2 og USER_KEY er forbundet til
USER_KEY er forbundet til IO_26
SYS_LED2 er forbundet til GPIO_186
B.
Derefter findes hvilke GPIO banke IO'erne er forbundet til
USER_KEY er forbundet til GPIO1
SYS_LED2 er forbundet til GPIO6
C.
Se om GPIO_OE værdierne er korrekte så SYS_LED2 er sat til output og USER_KEY er sat til input
SYS_LED2 har adressen 0x49058034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er forkert da vi skal have den 26 bit til at være et 0 så der kommer til at stå " 0x f b f f f f f f " dette vil gøre den til output
USER_KEY har adressen 0x48310034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er det korrekte for at den er et indput.
D.
E.
registeret 0x49058034 sættes til værdien 0 x f f f f f f f 7
dette gør at dioden bliver sat til en udgang.
mw.L 0x[adresse] [værdi]
registeret 0x4905803C sættest til 0 x 00000007
dette gør at dioden slukker da dioden er aktiv lav
koden til at skrive til registeret er mw.L 0x[adresse] [værdi]
Opgave 2
A.
Vi skal kompilere U-Boot. For at se hvordan dette gøre se mps.iha.dk
B.
Vi skal skrive et program som kan sætte værdien på GpioDOut efter værdien på GpioOE.
unsigned int gpioDIn;
unsigned int gpioDOut;
unsigned int gpioOE;
volatile unsigned long *GpioDIn_ptr = 0x48310038;
volatile unsigned long *GpioOE_ptr = 0x49058034;
volatile unsigned long *GpioDOut_ptr = 0x4905803c;
gpioOE = (unsigned int)(*GpioOE_ptr);
gpioOE &= ~(1<<4); // Sætter SYS_LED til at være output.
*GpioOE_ptr = (unsigned long)(gpioOE);
while(1)
{
gpioDIn = (unsigned int)(*GpioDIn_ptr);
if ( gpioDIn & 0x04000000 ) // Ser om knappens bit er 1
{
gpioDOut = (unsigned int)(*GpioDOut_ptr);
gpioDOut |= (1<<4); // Tænder lysdioden
*GpioDOut_ptr = (unsigned long)(gpioDOut);
}
else
{
gpioDOut = (unsigned int)(*GpioDOut_ptr);
gpioDOut &= ~(1<<4); // Slukker lysdioden
*GpioDOut_ptr = (unsigned long)(gpioDOut);
}
};
C.
Programmet skal kompileres; se mps.iha.dk
D.
Overføre programmet til U-Boot; se mps.iha.dk
Loader programmet til en adresse på memory ved at skrive: loady 0x80300000
Efterfølgende køre man programmet ved at skrive: go 0x80300000
Opgave1
A.
Først findes hvilke IO SYS_LED2 og USER_KEY er forbundet til
USER_KEY er forbundet til IO_26
SYS_LED2 er forbundet til GPIO_186
B.
Derefter findes hvilke GPIO banke IO'erne er forbundet til
USER_KEY er forbundet til GPIO1
SYS_LED2 er forbundet til GPIO6
C.
Se om GPIO_OE værdierne er korrekte så SYS_LED2 er sat til output og USER_KEY er sat til input
SYS_LED2 har adressen 0x49058034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er forkert da vi skal have den 26 bit til at være et 0 så der kommer til at stå " 0x f b f f f f f f " dette vil gøre den til output
USER_KEY har adressen 0x48310034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er det korrekte for at den er et indput.
D.
E.
registeret 0x49058034 sættes til værdien 0 x f f f f f f f 7
dette gør at dioden bliver sat til en udgang.
mw.L 0x[adresse] [værdi]
registeret 0x4905803C sættest til 0 x 00000007
dette gør at dioden slukker da dioden er aktiv lav
koden til at skrive til registeret er mw.L 0x[adresse] [værdi]
Opgave 2
A.
Vi skal kompilere U-Boot. For at se hvordan dette gøre se mps.iha.dk
B.
Vi skal skrive et program som kan sætte værdien på GpioDOut efter værdien på GpioOE.
unsigned int gpioDIn; unsigned int gpioDOut; unsigned int gpioOE; volatile unsigned long *GpioDIn_ptr = 0x48310038; volatile unsigned long *GpioOE_ptr = 0x49058034; volatile unsigned long *GpioDOut_ptr = 0x4905803c; gpioOE = (unsigned int)(*GpioOE_ptr); gpioOE &= ~(1<<4); // Sætter SYS_LED til at være output. *GpioOE_ptr = (unsigned long)(gpioOE); while(1) { gpioDIn = (unsigned int)(*GpioDIn_ptr); if ( gpioDIn & 0x04000000 ) // Ser om knappens bit er 1 { gpioDOut = (unsigned int)(*GpioDOut_ptr); gpioDOut |= (1<<4); // Tænder lysdioden *GpioDOut_ptr = (unsigned long)(gpioDOut); } else { gpioDOut = (unsigned int)(*GpioDOut_ptr); gpioDOut &= ~(1<<4); // Slukker lysdioden *GpioDOut_ptr = (unsigned long)(gpioDOut); } };C.
Programmet skal kompileres; se mps.iha.dk
D.
Overføre programmet til U-Boot; se mps.iha.dk
Loader programmet til en adresse på memory ved at skrive:
loady 0x80300000
Efterfølgende køre man programmet ved at skrive:
go 0x80300000